#!/usr/bin/env python

class Fichier_de_config:
    """Classe utilitaire de lecture de fichier.
	Offre des methodes qui renvoient le contenu d'un fichier
	sous forme de string (parse2string)
	sous forme d'une liste de lignes (parse2line)
	sans retour-chariot (parse2StringLine)
	sans les lignes vides et les sans les lignes commentees (parse2TrueLine)"""
    def __init__(self, file_name):
        self.file_name = file_name

    def parse2string (self):
        """ La totalite du fichier est place dans une chaine"""
        file_object = open(self.file_name)
        try: 
            all_the_text = file_object.read( )
            return all_the_text
        finally: 
            file_object.close( )


    def parse2line (self):
        """Le fichier est place dans une liste de lignes(les retour-chariot sont concerve)"""
        file_object = open(self.file_name)
        try: 
            list_of_all_the_lines = file_object.readlines( )
            return list_of_all_the_lines
        finally: 
            file_object.close( )

    def parse2StringLine (self):
        """Le fichier est place dans une liste de lignes sans retour chariot"""
        file_object = open(self.file_name)
        try: 
            list_of_all_the_lines = file_object.read( ).splitlines( )
            return list_of_all_the_lines
        finally: 
            file_object.close( )


    def parse2TrueLine (self, commentaire='#'):
        """Le fichier est place dans une liste de lignes. Les lignes vides et les commentaires sont supprimes"""
        file_object = open(self.file_name)
        try:
            liste=[]
            for line in file_object:
                #supprime les espaces et les retours chariots
                line = line.rstrip( )
                #On ignore les lignes vides (y a plus d'espace dans les lignes) 
                if len(line) == 0:
                    continue
                #On se passe de commentaire ;)
                if line[0] == commentaire:
                    continue
                liste.append(line)
        finally: 
            file_object.close( )
        return liste


class Gtk_fichier_iconrc (Fichier_de_config):
    """Classe utilitaire pour recuperer les parametres d'un fichier de conf
	des icones gtk:
	Syntaxe: stock ["libelle_parametre"] = {{"nom_image.extension"}}"""
    def __init__(self, filename):
        Fichier_de_config.__init__(self, filename)
        self.parametres = {}
        self.make_dico_param()

    def make_dico_param(self):
        for line in self.parse2TrueLine():
            #eclatement de la ligne selon le caractere "
            line = line.split ('"')
            #Ajout d'un element au dictionnaire avec le libelle du parametre en indice
            #la valeur du parametre en valeur
            self.parametres [line[1]] = line[3]

    def get_dico(self):
        return self.parametres

    def get_dico_keys(self):
        return self.parametres.keys()

    def get_dico_values(self):
        return self.parametres.values()


if __name__ == '__main__':
    f = Fichier_de_config("iconrc")
    print "parse2line\n"
    for line in f.parse2line():
        print line
    

    print "##############################################################"
    print "parse2StringLine\n"
    
    for line in f.parse2StringLine():
        print line
    

    print "##############################################################"
    print "parse2TrueLine\n"
    for line in f.parse2TrueLine():
        print line

    print "##############################################################"
    print "parse2TrueLine\n"
    for line in f.parse2TrueLine():
        line = line.split ('"')
        print line[1]
        print line[3]
    

    param = Gtk_fichier_iconrc("iconrc")
    
    
                               
